﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;

namespace Controladora.Sistema
{
    public class CUGestionarordendeproduccion
    {
        private static CUGestionarordendeproduccion Instancia;
        public static CUGestionarordendeproduccion ObtenerInstancia()
        {
            if (Instancia == null)
            {
                Instancia = new CUGestionarordendeproduccion();
            }
            return Instancia;
        }

        private CUGestionarordendeproduccion()
        {
            //Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            //Modelo.Seguridad.CatalogoUsuarios.ObtenerInstancia();
            //Servicios.Conexion.ObtenerInstancia().Desconectar();
            
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public ReadOnlyCollection<Entidades.Sistema.OrdenProduccion> ConsultarOrdenProduccion()
        {
            try
            {
                Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
                ReadOnlyCollection<Entidades.Sistema.OrdenProduccion> ColOrdenProduccion = Modelo.Sistema.CatalogoOrdenProduccion.ObtenerInstancia().ListarOrdenesProduccion();
                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
                return ColOrdenProduccion;
            }
            finally
            {
                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="cod_orden"></param>
        /// <param name="estado"></param>
        /// <param name="fec_orden"></param>
        /// <param name="oProducto"></param>
        /// <returns></returns>
        public ReadOnlyCollection<Entidades.Sistema.OrdenProduccion> ConsultarOrdenProduccion(int cod_orden, string estado, DateTime fec_orden,Entidades.Sistema.Producto oProducto)
        {
            try
            {
                Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
                ReadOnlyCollection<Entidades.Sistema.OrdenProduccion> ColOrdenProduccion = Modelo.Sistema.CatalogoOrdenProduccion.ObtenerInstancia().ListarOrdenesProduccion(cod_orden, estado,fec_orden,oProducto);
                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
                return ColOrdenProduccion;
            }
            finally
            {
                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="oOrden"></param>
        /// <returns></returns>
        public bool InterrumpirOrden(Entidades.Sistema.OrdenProduccion oOrden)
        {
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            Modelo.Sistema.CatalogoOrdenProduccion.ObtenerInstancia().CambiaEstadoOrden(oOrden);
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            return true;
        }


        //Casos de usos de extension

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public ReadOnlyCollection<Entidades.Sistema.Producto> ConsultarProductos()
        {
            try
            {
                Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
                ReadOnlyCollection<Entidades.Sistema.Producto> ColProductos = Modelo.Sistema.CatalogoProductos.ObtenerInstancia().ListarProductos();
                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
                return ColProductos;
            }
            catch (Exception ex)
            {
                throw (ex);
            }
            finally
            {
                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="oProducto"></param>
        /// <returns></returns>
        public List<Entidades.Sistema.Pedido> ConsultarPedidosPorProducto(Entidades.Sistema.Producto oProducto)
        {
            try
            {
                Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
                List<Entidades.Sistema.Pedido> ColPedidos = Modelo.Sistema.CatalogoPedidos.ObtenerInstancia().ListarPedidosPorProducto(oProducto);
                Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
                return ColPedidos;
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="orden"></param>
        /// <returns></returns>
        public int RegistrarOrden(Entidades.Sistema.OrdenProduccion orden)
        {
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            int res = Modelo.Sistema.CatalogoOrdenProduccion.ObtenerInstancia().RegistrarOrden(orden);
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            return res;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="oOrden"></param>
        /// <returns></returns>
        public bool EliminarOrden(Entidades.Sistema.OrdenProduccion oOrden)
        {
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            bool res = Modelo.Sistema.CatalogoOrdenProduccion.ObtenerInstancia().EliminarOrden(oOrden);
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            return res;
        }
        
        /// <summary>
        /// 
        /// </summary>
        /// <param name="oOrden"></param>
        /// <returns></returns>
        public bool ModificarOrdenProduccion(Entidades.Sistema.OrdenProduccion oOrden)
        {
            Servicios.Conexion.ObtenerInstancia().Conectar("Sistema");
            Modelo.Sistema.CatalogoOrdenProduccion.ObtenerInstancia().ModificarOrden(oOrden);
            Servicios.Conexion.ObtenerInstancia().Desconectar("Sistema");
            return true;
        }
    }
}